package com.jiangjiang.eshop.promotion.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jiangjiang.eshop.order.dto.CouponDTO;
import com.jiangjiang.eshop.promotion.biz.CouponBiz;
import com.jiangjiang.eshop.promotion.dto.CouponQueryPageDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @ClassName CouponController
 * @Description TODO
 * @Author jhw
 * @Date 2021/8/22 20:17
 * @Version 1.0
 **/
@Slf4j
@RestController
@RequestMapping("/promotion/coupon")
public class CouponController {
    @Autowired
    private CouponBiz couponBiz;

    /**
     * 分页查询优惠券
     * @param dto 分页查询条件
     * @return 查询结果
     */
    @PostMapping("/queryForPage")
    public Page<CouponDTO> queryForPage(@RequestBody CouponQueryPageDTO dto){
        try {
            return couponBiz.queryForPage(dto);
        }catch (Exception e){
            log.warn("CouponController queryForPage error",e);
        }
        return null;

    }

    /**
     * 分页查询优惠券
     * @param dto 分页查询条件
     * @return 查询结果
     */
    @PostMapping("/saveCoupon")
    public Boolean saveCoupon(@RequestBody CouponDTO dto){
        try {
            return couponBiz.saveCoupon(dto);
        }catch (Exception e){
            log.warn("CouponController saveCoupon error",e);
        }
        return false;

    }

    /**
     * 根据id查询优惠券
     * @param id 优惠券id
     * @return 优惠券
     */
    @GetMapping("/getById/{id}")
    public CouponDTO getById(@PathVariable("id") Long id) {
        try {
            return couponBiz.queryById(id);
        } catch (Exception e) {
            log.warn("CouponController getById error",e);
        }
        return null;
    }


    /**
     * 更新优惠券
     * @param dto
     * @return
     */
    @PostMapping("/updateCoupon")
    public Boolean updateCoupon(@RequestBody CouponDTO dto){
        try {
            return couponBiz.updateCoupon(dto);
        }catch (Exception e){
            log.warn("CouponController updateCoupon error",e);
        }
        return false;
    }

    /**
     * 删除优惠券
     * @param id 优惠券id
     * @return 处理结果
     */
    @GetMapping("/remove/{id}")
    public Boolean removeCoupon(@PathVariable("id")Long id){
        try {
            return couponBiz.removeCoupon(id);
        }catch (Exception e){
            log.warn("CouponController removeCoupon error",e);
        }
        return false;
    }


    /**
     * 领取优惠券
     * @param couponId 优惠券id
     * @param userAccountId 用户账号id
     * @return 是否领取成功
     * @throws Exception
     */
    @PutMapping("/achieve")
    public Boolean achieve(Long couponId, Long userAccountId) {
        try {
            return couponBiz.achieve(couponId, userAccountId);
        } catch (Exception e) {
            log.warn("CouponController removeCoupon error",e);
        }
        return false;
    }

    /**
     * 优惠券发放
     * @param couponId 优惠券id
     * @return 是否发放成功
     * @throws Exception
     */
    @PutMapping("/giveOut")
    public Boolean giveOut(Long couponId) {
        try {
            return couponBiz.giveOut(couponId);
        } catch (Exception e) {
            log.warn("CouponController giveOut error",e);
        }
        return false;
    }

}
